This invention relates to software solution patterns, and more particularly to apparatus and methods for capturing software solution patterns and associated points of variability.
In the field of computer science, a “pattern” is a type of problem that occurs over and over again, and an abstract solution to the problem that can be used over and over again to solve the problem. Patterns can take on various different forms, including “design patterns,” “architectural patterns,” and “integration patterns.” A design pattern is a general reusable solution to a commonly occurring software design problem. The design pattern is typically not a finished design that is transformable directly into code, but rather a description or template to solve a problem that can be used in many different situations. By contrast, architectural patterns are software patterns that offer well-established solutions to architectural problems in software engineering. Architectural patterns are typically larger in scale than design patterns. Integration patterns, by contrast, are software patterns used to make disparate applications work together in a unified manner.
To improve programmer productivity and facilitate easy adoption of best practices for solutions to commonly occurring problems in specific domains, there is a need for prefabricated solution patterns, built by subject matter experts, which can be easily implemented in end user environments. One key issue when building solution patterns is to determine which parts of the pattern (referred to as “points of variability” or “pattern parameters”) can be changed by the end user. These points of variability can be very simple, such as strings or integer values, or very complex, such as multi-dimensional arrays of complex structures. In certain cases, the type and complexity of points of variability that may be eventually used in a pattern may not be known at the time the pattern template is created.
In view of the foregoing, what is needed is an extensible meta model for capturing patterns and associated points of variability. Ideally, such a meta model would provide a mechanism for capturing points of variability of arbitrary complexity or type in a manner that is extensible and independent of the domain of application of the pattern. Such an extensible mechanism would enable the construction of general tools for capturing and employing patterns in any arbitrary domain of application, including new domains that do not exist at the time tooling is constructed. Further needed are mechanisms for capturing default values for a pattern's points of variability.